package logic

import (
	"common/model"
	"context"
	"errors"
	"fmt"
	"strconv"
	"time"

	"product_server/domain/consts"
	"product_server/product_pkg"
	product "product_server/proto"
)

func (p *ProductServer) CreateGroup(ctx context.Context, req *product.CreateGroupRequest) (*product.CreateGroupResponse, error) {
	// 检查商品是否存在
	info, err := model.GetProductInfo(req.ProductId)
	if err != nil {
		return nil, fmt.Errorf("获取商品信息失败: %w", err)
	}
	if info.Id == 0 {
		return nil, errors.New("商品不存在")
	}

	// 计算拼团价格
	groupPrice := info.Price * consts.Discount

	// 将用户ID转换为字符串
	userid := strconv.Itoa(int(req.Uid))

	// 计算过期时间
	expireTime := time.Now().Add(time.Second * consts.GROUP_EXPIRE)

	// 创建拼团信息
	gb := model.GroupBuy{
		ProductId:   int32(req.ProductId), // 商品ID
		CreatorId:   int32(req.Uid),       // 发起人ID
		MemberIds:   nil,                  // 参加人ID
		CurrentSize: 1,                    // 当前参加人数
		MaxSize:     consts.MAX_SIZE,      // 最大参加人数
		Price:       float64(groupPrice),  // 拼团价格
		ExpireTime:  expireTime,           // 过期时间
		Status:      "pending",            // 状态
	}

	// 创建拼团信息
	if err := gb.Create(); err != nil {
		return nil, fmt.Errorf("创建拼团信息失败: %w", err)
	}

	// 生成拼团Token
	token, err := product_pkg.GenerateGroupBuyingToken(strconv.Itoa(int(gb.Id)), userid, strconv.Itoa(int(gb.ProductId)))
	if err != nil {
		return nil, fmt.Errorf("生成拼团Token失败: %w", err)
	}

	return &product.CreateGroupResponse{
		Token: token,
	}, nil
}
